package com.flyqiu.common.sc.calculate;

import com.flyqiu.common.sc.FlyQiuSCContext;
import com.flyqiu.common.sc.statistical.IFlyQiuStatistical;

import java.util.ArrayList;
import java.util.List;

/**
 * 字符串拼接计算类。
 * 实现了字符串的拼接功能。
 */
public class FlyQiuConcatCalculate extends FlyQiuStrBaseCalculate {

    public static final String CALCULATE_TYPE_CONCAT = "concat";
    private final List<String> tempList = new ArrayList<>();

    /**
     * 获取计算类型。
     *
     * @return 计算类型的字符串表示，为 "concat"
     */
    @Override
    public String calculateType() {
        return CALCULATE_TYPE_CONCAT;
    }

    /**
     * 计算字符串拼接。
     *
     * @param context 上下文对象，包含数据源大小和当前行索引
     * @param cur     当前值
     */
    @Override
    public void calculate(FlyQiuSCContext<?> context, String cur) {
        if (cur == null) {
            return;
        }
        tempList.add(cur);
    }
    

    /**
     * 重置计算结果。
     * 清空临时列表。
     */
    @Override
    public void restCalculate() {
        tempList.clear();
    }

    /**
     * 获取当前计算的结果值。
     *
     * @param context 统计上下文
     * @return 当前拼接后的字符串
     */
    @Override
    public String getValue(IFlyQiuStatistical<?> context) {
        String split = context.getSplit();
        if (split == null) {
            split = "";
        }
        return String.join(split, tempList);
    }
}
